package es.ojugames.myplaces;

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.widget.ImageView;
import android.widget.TextView;
import es.ojugames.myplaces.database.ConstantsDB;
import es.ojugames.myplaces.location.MostrarUbicacionActivity;

//Activity que mostrara todos los datos en detalle de un Lugar seleccionado
public class MostrarLugarActivity extends Activity {

	//Elementos del Layout que mostraran los datos obtenidos del lugar
	private TextView nombreTextView;
	private TextView descripcionTextView;
	private ImageView imgFoto;
	
	private Double lat, lon;
	
	//id del Lugar a mostrar
	private Long idPlaces;
	
	//Variable de control para inhabilitar botones en caso de error
	boolean control;
	//Variable de control para evitar la ejecucion del primer onResume
	boolean primerCiclo = false;
	
	//Constantes para identificar las respuestas de distintas Activities
	private final int ACTIVITY_EDIT = 0;

	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		
		//en principio todo correcto
		control = true;
		
		
		
		//Cargamos el layout
		setContentView(R.layout.mostrar_lugar);
		
		//Recogemos los elementos de la interfaz que nos hacen falta para cargar
		//los datos
		nombreTextView = (TextView) this.findViewById(R.id.nombreLugar);
		descripcionTextView = (TextView) this.findViewById(R.id.descripcionLugar);
		imgFoto = (ImageView) findViewById(R.id.imgFoto);
		
		
		//Recogemos el id del lugar que se nos proporcionar a traves
		//del intent de llamada
		Bundle extras = getIntent().getExtras();
		if(extras != null) {
			idPlaces = extras.getLong("idPlaces");
		}
		
		//Realizamos la consulta a base de datos para obtener los datos del lugar
		recuperarDatos();
	}
	
	//Metodo que llama a una activity para mostrar la localizacion
	//del lugar en un mapa
	public void verMapa(View v) {
		if (control) {
			Intent intent = new Intent(MostrarLugarActivity.this, MostrarUbicacionActivity.class);
	        intent.putExtra("lat", lat);
			intent.putExtra("lon", lon);
			startActivity(intent);
		}
	}
	
	//Metodo que llama a la activity EditarLugarActivity en modo edicion
	public void editar(View v) {
		if (control) {
			Intent intent = new Intent(MostrarLugarActivity.this, EditarLugarActivity.class);
	        intent.putExtra("modo", "edicion");
			intent.putExtra("idPlaces", idPlaces);
			startActivityForResult(intent, ACTIVITY_EDIT);
		}
	}
	
	//Nos aseguramos que cuando volvamos de la pantalla de edicion los datos se actualicen
	public void onResume(){
		super.onResume();
		
		if (primerCiclo) {
			//No tengo claro porque es necesario pero no ejecutamos este codigo la imagen no se recarga
			setContentView(R.layout.mostrar_lugar);
			nombreTextView = (TextView) this.findViewById(R.id.nombreLugar);
			descripcionTextView = (TextView) this.findViewById(R.id.descripcionLugar);
			imgFoto = (ImageView) findViewById(R.id.imgFoto);
			
			//para recargar los datos
			recuperarDatos();
		}
		
		//ya hemos pasado el primero onResume
		primerCiclo = true;
	}
	
	public void recuperarDatos(){
		//Realizamos la consulta a base de datos para obtener los datos del lugar
		
		//Uri del elemento a recuperar
		Uri uri = Uri.parse("content://es.ojugames.myplaces/places/" + idPlaces);
		//Obtenemos el cursor con los datos solicitados
		Cursor cursor = getContentResolver().query(uri, null, null, null, null);
		
		//Obtenemos los indices de las columnas que queremos consultar
		int indexNombre = cursor.getColumnIndex(ConstantsDB.Places.NOMBRE);
		int indexDescripcion = cursor.getColumnIndex(ConstantsDB.Places.DESCRIPCION);
		int indexFoto = cursor.getColumnIndex(ConstantsDB.Places.FOTO);
		int indexLon = cursor.getColumnIndex(ConstantsDB.Places.LONGITUD);
		int indexLat = cursor.getColumnIndex(ConstantsDB.Places.LATITUD);
		
		//Nos aseguramos de que existe al menos un registro
		if (cursor.moveToFirst()) {
			//Accedemos a las columnas para obtener los datos
			String nombre =  cursor.getString(indexNombre);
			String descripcion = cursor.getString(indexDescripcion);
			String foto = cursor.getString(indexFoto);
			
			lon = new Double(cursor.getString(indexLon));
		    lat = new Double(cursor.getString(indexLat));
		    
			//Parseamos la uri de la foto
			Uri uriFoto = Uri.parse(foto);
			
			//Cargamos en pantalla los datos
			nombreTextView.setText(nombre);
			descripcionTextView.setText(descripcion);
		    
			imgFoto.setImageURI(uriFoto);
			
		} else {
			//En caso de no existir el registro indicamos que
			//ha existido un error de en BD
			nombreTextView.setText(R.string.errorBD);
			descripcionTextView.setText(R.string.errorBD);
		    imgFoto.setImageResource(R.drawable.no_image);
		    control = false;
		}
	}
	
	//Metodo que gestiona las respuestas de las activities
	@Override 
	public void onActivityResult(int requestCode, int resultCode, Intent data) {     
	  super.onActivityResult(requestCode, resultCode, data); 
	  
	  //Comprobamos que Actitiy es la que nos responde
	  switch(requestCode) { 
	    //Al volver de la pantalla de edicion si hemos borrado el registro
	  	//se activara la variable de control y deberemos cerrar la activty
	  	case ACTIVITY_EDIT: 
	  		if (resultCode != RESULT_CANCELED){
	  			Bundle extras = data.getExtras();
	  			String type = extras.getString("type");
		  		
		  		if (type.equalsIgnoreCase("delete")) {
		  			finish();
		  		}
	  		}
	  		break; 
	  } 
	}
}
